Aufgabe 1 – Informationssysteme
Wenn Sie an die Beispiele aus der Vorlesung denken: Warum ist die Entwicklung großer Informationssysteme so herausfordernd?
Lösung: Ein solches Informationssystem besteht i.d.R. nicht aus wenigen Klassen oder ist eine einzelne Anwendung. Vielmehr besteht ein solches Informationssystem aus sehr vielen Klassen („Programmieren im Großen“) und häufig auch mehreren Teil-Anwendungen. Auch starten Sie bei der Entwicklung eines solchen Informationssystems oft nicht „auf der grünen Wiese“. Es existieren häufig bereits bestehende Informationssysteme oder Systemkomponenten/-teile, die integriert werden müssen bzw. sollen. Dies können Informationssysteme von Partnerfirmen, z.B. Banken oder Logistik-Unternehmen, sein. Die Informationssysteme sind dabei i.d.R. heterogen. Diese Heterogenität kann sich z.B. in Form von unterschiedlichen Betriebssystemen (Linux, Windows, OS X usw.), in Form von unterschiedlichen Schnittstellen zum Informationssystem, und in Form von monolithischen oder verteilten Softwarearchitekturen usw. zeigen. Die Integration sowie die Berücksichtigung von unterschiedlichen qualitativen Anforderungen (non-functional requirements) an das Informationssystem, wie z.B. Performance, Verfügbarkeit oder Sicherheit, tragen einen großen Teil zu den Herausforderungen bei der Entwicklung solcher Systeme bei.
一个这样的信息系统通常不只是由少数几个类或单个应用程序组成。相反,这样的信息系统由非常多的类(“大规模编程”)和通常多个子应用程序组成。此外,在开发这样的信息系统时,您通常不会从“零开始”。往往已经存在需要或应该集成的现有信息系统或系统组件/部分。这些可能是合作伙伴公司的信息系统,例如银行或物流公司。通常,这些信息系统是异构的。这种异构性可能表现为不同的操作系统(如Linux、Windows、OS X等)、不同的信息系统接口形式,以及单体或分布式软件架构形式等。集成以及考虑对信息系统的不同质量要求(非功能性需求),例如性能、可用性或安全性,是开发此类系统时面临的重大挑战。
Lösung:
a) “The software architecture of a system is the set of structures needed to reason about the system, which comprise software elements, relations among them, and properties of both.” (Bass and Clements and Kazman, 2012) Eine Softwarearchitektur definiert Softwarekomponenten eines Software-Systems und das Zusammenspiel dieser Komponenten untereinander. Dabei gibt es häufig nicht nur eine Sicht auf eine Softwarearchitektur eines Software-Systems. - 2 - Interessante Sichten auf das System sind neben einer organisatorischen Gliederung eines Systems (statische Sicht auf die Komponenten in Form von „Lines and Boxes“, Klassendiagrammen der Unified Modeling Language (UML) usw.) auch dynamische Aspekte eines Systems, wie z.B. das Zusammenspiel der verschiedenen Komponenten zur Laufzeit (Prozessbeschreibungen, Sequenzdiagramme der UML usw.) und nicht zuletzt die Betrachtung von Allokation von Software auf andere nicht-software Elemente (Deployment auf Infrastruktur und Ressourcenallokation, auch Entwicklerteams). Keine der unterschiedlichen Sichten auf das System ist alleine die Softwarearchitektur. Die Softwarearchitektur ergibt sich aus allen diesen Sichten und deren Informationen. Dabei hat jedes Software-System eine Softwarearchitektur. Das Verhalten jeder Komponente ist Teil der Softwarearchitektur. Denn das Verhalten einer Komponente bestimmt, wie andere Komponenten geschrieben werden müssen, um interagieren zu können. Somit sollte das Verhalten aller Komponenten in einer Softwarearchitektur – nicht unbedingt in aller Tiefe – beschrieben werden. Die Definition gibt keine Aussage, welche Softwarearchitektur gut oder schlecht ist. Somit ist es notwendig, die Softwarearchitektur zu evaluieren, um Aussagen über deren Performance, Skalierbarkeit, Verfügbarkeit, Sicherheit usw. zu machen.
b) Es gibt keine gute oder schlechte Softwarearchitektur. Es gibt nur gute oder schlechte Softwarearchitekturen für einen definierten Zweck. Anhand von spezifizierten Zielen kann lediglich evaluiert werden, ob eine Softwarearchitektur für diesen Zweck passend oder unpassend ist.
解决方案:
a) “系统的软件架构是用于推理系统所需的一组结构,包括软件元素、它们之间的关系以及两者的属性。”(Bass 和 Clements 和 Kazman,2012)软件架构定义了软件系统的软件组件以及这些组件之间的相互作用。然而,通常对一个软件系统的软件架构不止一种视角。除了系统的组织结构(以“线和框”的形式、统一建模语言(UML)的类图等的静态视角)外,对系统的有趣视角还包括系统的动态方面,例如各种组件在运行时的交互(过程描述、UML的序列图等),以及软件在其他非软件元素上的分配(在基础设施上的部署和资源分配,包括开发团队)。系统的任何单一视角都不是完整的软件架构。软件架构是由所有这些视角及其信息组成的。每个软件系统都有一个软件架构。每个组件的行为是软件架构的一部分,因为组件的行为决定了其他组件必须如何编写才能进行交互。因此,所有组件的行为都应在软件架构中描述——尽管不一定要深入。这个定义没有说明什么样的软件架构是好是坏。因此,有必要评估软件架构,以对其性能、可扩展性、可用性、安全性等作出判断。
b) 没有好的或坏的软件架构。只有针对特定目的好的或坏的软件架构。根据指定的目标,只能评估某个软件架构是否适合该目的。
Lösung:
Angenommen, Sie hätten drei (wie auch immer geartete) vorhandene IT-Systeme 𝐴, 𝐵 und 𝐶, die für diverse Business-Aufgaben zuständig sind und die keine standardisierten Schnittstellen besitzen. Ihre Aufgabe besteht darin, Clients einen einheitlichen Zugriff zu diesen Systemen zu ermöglichen. Geben Sie für diese Problemstellung skizzenhafte Architekturbilder an, aus denen der Unterschied zwischen 2- und 3-Tier Architekturen ersichtlich wird. Welche würden Sie verwenden?
3层架构是更巧妙的选择,因为应用程序的集成是通过中间件而不是客户端应用程序进行的。这样客户端应用程序更易于维护,并且服务器系统和旧系统接口的更改可以对客户端隐藏。例如,如果将系统X更换为具有类似功能但接口不同的另一个系统,客户端将不会察觉到这种变化。
Was ist eine N-Tier Architektur? Nennen Sie einige Kriterien die für ein N-schichtiges Architekturdesign eines Informationssystems sprechen.
Lösung: Eine N-Tier-Architektur entsteht, wenn man mehrere 3-tier Systeme miteinander verbindet. Kriterien dafür sind z.B.: Leistungsfähigkeit, Skalierbarkeit, Anzahl der Benutzer/Verbindungen, Integration vorhandener Systeme, Wiederverwendbarkeit, Sicherheit, Flexibilität bzgl. Erweiterbarkeit…
KLAUSUR relevent
Handelt es sich bei den folgenden Aussagen um eine funktionale Anforderung, eine nichtfunktionale Anforderung, oder gar keine Anforderung?
in den Folien stand Replication(Scaling out)